#!/usr/bin/env ruby

require 'optparse'

vendors = {
  'npm': 'https://registry.npmjs.org',
  'yarn': 'https://registry.yarnpkg.com',
  'taobao': 'https://registry.npm.taobao.org'
}
npm_set = false
yarn_set = false

ARGV.push('--help') if ARGV.empty?
begin
  OptionParser.new do |opts|
    opts.banner = <<~EOF
      切换 Node 的 npm **和** yarn 的源，可用的提供商包括：

      #{
        vendors.keys.join("\n")
      }
    EOF

    opts.on('-n', '--npm', '仅设置 npm 下的 registry 镜像') do
      npm_set = true
    end

    opts.on('-y', '--yarn', '仅设置 yarn 下的 registry 镜像') do
      yarn_set = true
    end
  end.parse!
rescue OptionParser::ParseError => ex
  STDERR.puts ex.message
  exit 1
end

vendor = ARGV[0].to_sym
unless vendors.key?(vendor)
  STDERR.puts "不支持的提供商：#{vendor}"
  exit
end

source = vendors[vendor]
if !npm_set && !yarn_set
  npm_set = true
  yarn_set = true
end
if npm_set && yarn_set
  system "npm config set registry #{source}"
  system "yarn config set registry #{source}"
  puts <<~CHECK
    已经将 npm 和 yarn 设置为 #{vendor} 镜像，分别调用下述命令检查：

        npm config get registry
        yarn config get registry
  CHECK
elsif npm_set && !yarn_set
  system "npm config set registry #{source}"
  puts <<~CHECK
    已经将 npm 设置为 #{vendor} 镜像，可调用下述命令检查：

        npm config get registry
  CHECK
else # !npm_set && yarn_set
  system "yarn config set registry #{source}"
  puts <<~CHECK
    已经将 yarn 设置为 #{vendor} 镜像，可调用下述命令检查：

        yarn config get registry
  CHECK
end
